
package com.phevos.common.util;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TaskThreadPoolManager
{
    private static Timer timer = new Timer();

    private static TaskThreadPoolManager manager = null;

    // monitor for synchronized_pool
    private static Object monitor_pool = new Object();

    /**
     * ˽�еĹ��ź���ʹ��̳ع������ܹ��ֶ�����
     */
    private TaskThreadPoolManager()
    {
    }

    /**
     * ȡ�������̳ع������ʵ��
     * 
     * @return TaskThreadPoolManager
     */
    public static TaskThreadPoolManager getInstance()
    {
        if (manager == null)
        {
            manager = new TaskThreadPoolManager();
        }
        return manager;
    }

    /**
     * ���������ע�������Ψһ��ʶִ�и������������̳��еı�ʶ�������г�ʱ��ʱ��
     * 
     * @param ident String
     * @param time long
     */
    public void registTask(String ident, long time)
    {
        // ��ƥ�����������ʱ�����0��ʱ�������������ʱ���ܽ��
        if (time > 0)
        {
            TimeOutChecker t = null;
            synchronized (monitor_pool)
            {
                // ������ܽ��
                if (ident != null)
                {
                    t = new TimeOutChecker(ident);
                }
                // ��timer��ע���ܽ��
                timer.schedule(t, new Date(time));
            }
        }
    }

    /**
     * <p>
     * Title: TimeOutChecker
     * </p>
     * <p>
     * Description: ��ʱ�Ľ�̳���,�������ƶ�ʱ�����Զ�ִ�б��γ���.<br>
     * �ڱ��γ����л��ж������̳��и������Ƿ���Ȼ����,���������ʾ�������Ѿ�ִ�����
     * </p>
     * <p>
     * Copyright: Copyright (c) 2005
     * </p>
     * <p>
     * Company: ������j���¿Ƽ�
     * </p>
     * 
     * @author credible_zhang
     * @version 1.0
     */
    private class TimeOutChecker extends TimerTask
    {
        private String taskIdent = null;

        public TimeOutChecker(String ident)
        {
            taskIdent = ident;
        }

        public void run()
        {
            TaskThreadPool.getInstance().checkingTask(taskIdent);
        }
    }
}
